package com.pasche;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;

public class UbicacionAdapter extends Adapter{
	 
    public void agregarUbicacion(Ubicacion ub) throws Exception{
    	Connection conn = null;
    	try {
	    	conn = abrirConexion();
	    	Statement statement;
	    	statement = conn.createStatement();
	    	String add ="INSERT into ubicaciones (latitud, longitud, calle, altura, descripcion, id_servicio) " +
					"VALUES ("+ub.getLatitud()+", "+ub.getLongitud()+", '"+ub.getCalle()+"', "+ub.getAltura()+", '"+ub.getDescripcion()+"', "+ub.getId_servicio()+")";
			statement.executeUpdate(add);
		}
    	catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error al conectar con la base de datos.", e);
		}
		finally{
			conn.close();
    		//cerrarConexion(conn);
		}
	}
    
    public void eliminarUbicacion(Ubicacion ub, Integer id_servicio) throws Exception{
    	Connection conn = null;
    	try {
    		conn = abrirConexion();
	    	Statement statement;
			statement = conn.createStatement();
			String del ="DELETE from ubicaciones WHERE latitud = "+ub.getLatitud()+" AND longitud = "+ub.getLongitud()+" AND id_servicio = "+id_servicio;
			statement.executeUpdate(del);
		}
    	catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error al conectar con la base de datos.", e);
		}
    	finally{
    		conn.close();
    		//cerrarConexion(conn);
    	}
    }
    
    public void modificarDescripcion(Ubicacion ub, String newDesc, Integer id_servicio) throws Exception{
    	Connection conn = null;
    	try {
    		conn = abrirConexion();
	    	Statement statement;
			statement = conn.createStatement();
			String upd ="UPDATE ubicaciones SET descripcion = '"+newDesc+"' WHERE latitud = "+ub.getLatitud()+" AND longitud = "+ub.getLongitud()+" AND id_servicio = "+id_servicio;
			statement.executeUpdate(upd);
		}
    	catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error al conectar con la base de datos.", e);
		}
    	finally{
    		conn.close();
    		//cerrarConexion(conn);
    	}
    }
    
    public ArrayList<Ubicacion> getAll(int idServicio) throws Exception{
    	Connection conn = null;
    	ArrayList<Ubicacion> ubicaciones = new ArrayList<Ubicacion>();
		try {
    		conn = abrirConexion();
    		Statement statement = conn.createStatement();
			String consulta ="SELECT * FROM ubicaciones WHERE id_servicio = "+idServicio;
			ResultSet result = statement.executeQuery(consulta);
			while (result.next()) {
				double lat = result.getDouble("latitud");
				double lon = result.getDouble("longitud");
				String calle = result.getString("calle");
				int altura = result.getInt("altura");
				String descripcion = result.getString("descripcion");
				Integer id = result.getInt("id_ubicacion");
				Ubicacion ubicacion = new Ubicacion(lat, lon, calle, altura, descripcion, idServicio, id);
				ubicaciones.add(ubicacion);
			}
		}
		catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error al conectar con la base de datos.", e);
		}
    	finally{
    		conn.close();
    		//cerrarConexion(conn);
    	}
    	return ubicaciones;
    }
    
    public void modificarCalle(Ubicacion ub, String newCalle, Integer id_servicio) throws Exception{
    	Connection conn = null;
    	try {
    		conn = abrirConexion();
    		Statement statement = conn.createStatement();
			String upd ="UPDATE ubicaciones SET calle = '"+newCalle+"' WHERE latitud = "+ub.getLatitud()+" AND longitud = "+ub.getLongitud()+" AND id_servicio = "+id_servicio;
			statement.executeUpdate(upd);
		}
    	catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error al conectar con la base de datos.", e);
		}
    	finally{
    		conn.close();
    		//cerrarConexion(conn);
    	}
    }
    
    public void agregarLatLong(Ubicacion ub) throws Exception{
    	Connection conn = null;
    	try {
    		conn = abrirConexion();
			Statement statement = conn.createStatement();
			String upd ="UPDATE ubicaciones SET latitud = "+ub.getLatitud()+", longitud = "+ub.getLongitud()+" WHERE id_ubicacion = "+ub.getId();
			statement.executeUpdate(upd);
		}
    	catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error al conectar con la base de datos.", e);
		}
    	finally{
    		conn.close();
    		//cerrarConexion(conn);
    	}
    }
    
    public Ubicacion devolverUbicacion(Integer id) throws Exception{
    	Connection conn = null;
    	Ubicacion u = null;
		try {
    		Statement statement;
    		conn = abrirConexion();
    		
    		statement = conn.createStatement();
    		String sel ="SELECT latitud as lat, longitud as lon, calle, altura, descripcion, id_servicio from ubicaciones WHERE id_ubicacion = '"+id+"'";
    		ResultSet result = statement.executeQuery(sel);
    		if(result.next()){
    			double lat = result.getDouble("lat");
				double lon = result.getDouble("lon");
				String calle = result.getString("calle");
				int altura = result.getInt("altura");
				int id_servicio = result.getInt("id_servicio");
				String descripcion = result.getString("descripcion");
				Integer id_ubicacion = id;
				u = new Ubicacion(lat, lon, calle, altura, descripcion, id_servicio, id_ubicacion);
    		}
    	}
    	catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error al conectar con la base de datos.", e);
		}
    	finally{
    		conn.close();
    		//cerrarConexion(conn);
    	}
		return u;
    }
}
